﻿using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Practices.ObjectBuilder;
using Microsoft.Practices.CompositeWeb;
using AP.LUNA.DataEntities;
using AP.LUNA.BusinessLogic;
using System.Web;
using AP.LUNA.Commons;
using AP.LUNA.Exceptions;

namespace AP.LUNA.Shell.Views
{
    public class AdministrarDesempenosPresenter : Presenter<IAdministrarDesempenosView>
    {

        // NOTE: Uncomment the following code if you want ObjectBuilder to inject the module controller
        //       The code will not work in the Shell module, as a module controller is not created by default
        //
        // private IShellController _controller;
        // public AdministrarDesempenosPresenter([CreateNew] IShellController controller)
        // {
        // 		_controller = controller;
        // }
        private BLAsignaturas objAsignaturas = null;
        private BLPeriodos objPeriodos = null;
        private BLDesempenos objDesempenos = null;
        private HttpContext context = null;
        public AdministrarDesempenosPresenter()
        {
            objAsignaturas = new BLAsignaturas();
            objPeriodos = new BLPeriodos();
            objDesempenos = new BLDesempenos();
            context = HttpContext.Current;
        }
        public override void OnViewLoaded()
        {
            // TODO: Implement code that will be executed every time the view loads
        }

        public override void OnViewInitialized()
        {

            my_aspnet_users u = (my_aspnet_users)context.Session[Constanst.CREDENCIAL];
            //this.View.ListAsignaturas = objAsignaturas.GetbyProfesor(u.name);
            this.View.ListAsignaturas = objAsignaturas.GetbyProfesor("1065563860");
            List<periodos> ListP = objPeriodos.GetAll();
            ListP.Insert(0, new periodos() { Id = Constanst.CODIGO_NEGATIVO, Descripcion = Constanst.VALOR_NEGATIVO });
            this.View.ListPeriodos = ListP;

        }

        public void RegistrarDesempeño()
        {
            this.View.ListDesempenos = objDesempenos.GetbyAsignatura(this.View.IdAsignatura);
            this.View.IndexView = 1;
        }

        public void Guardar()
        {
            try
            {
                if ((CalculaPorcentaje(this.View.Periodo, this.View.IdAsignatura) + this.View.Porcentaje > 100))
                {
                    this.View.msgResult = UtilPresenter.ObtenerMensaje(ExceptionCode.PORCENTAJE_SUPERADO);
                    return;
                }
                desempenos d = new desempenos();
                d.Id = Guid.NewGuid();
                d.IdAsignatura = this.View.IdAsignatura;
                d.Descripcion = this.View.Tema;
                d.Periodo = this.View.Periodo;
                d.Porcentaje = this.View.Porcentaje;
                objDesempenos.Save(d);
                RegistrarDesempeño();
                this.View.msgResult = UtilPresenter.ObtenerMensaje(ExceptionCode.OPERACION_EXITOSA);
            }
            catch (Exception exc)
            {

                throw;
            }
        }

        private decimal CalculaPorcentaje(int idPeriodo, int idAsignatura)
        {
            return objDesempenos.GetPorcentajebyPeriodo(idPeriodo, idAsignatura);
        }
        // TODO: Handle other view events and set state in the view

        public void CargarEditar()
        {
            desempenos d = objDesempenos.GetbyId(this.View.IdTema);
            if (d!=null)
            {
                this.View.IdTema = d.Id;
                this.View.Tema = d.Descripcion;
                this.View.Periodo = d.Periodo.Value;
                this.View.Porcentaje = d.Porcentaje.Value;
                this.View.IndexView = 2;
            }
        }

        public void Actualizar()
        {
            try
            {
                desempenos d = objDesempenos.GetbyId(this.View.IdTema);
                if (d != null)
                {
                    d.Descripcion = this.View.Tema;
                    d.Periodo = this.View.Periodo;
                    d.Porcentaje = this.View.Porcentaje;
                    objDesempenos.Update(d);
                    this.View.msgResult = UtilPresenter.ObtenerMensaje(ExceptionCode.OPERACION_EXITOSA);
                }
            }
            catch (LUNAExcepcion exc)
            {
                this.View.msgResult = UtilPresenter.ObtenerMensaje(exc.CodeError);
            }
        }
    }
}




